[アップデート]パブリック IP アドレスなしで、EC2インスタンスにSSH接続できる EC2 Instance Connect Endpointがリリースしました
はじめに
EC2 Instance Connect Endpoint (以降 EIC エンドポイント) を使用すると、パブリック IP アドレスを使用せずに プライベート サブネット内のEC2インスタンスに SSH および RDP 接続できるようになりました。
以前は、プライベートサブネット内のインスタンスにSSHまたはRDP接続をするためには、踏み台サーバーを作成する必要がありました。
しかし、踏み台サーバーを使用すると、パッチ適用、管理、監査などの追加の運用オーバーヘッドとコストが発生します。
最近はセッションマネージャーで接続することが増えてきましたが、他の選択肢として、EIC エンドポイントを使用することで、運用オーバーヘッドなしでEC2インスタンスに接続できるようになります。
EIC エンドポイントは、AWS IAMベースでアクセスを制限したり、セキュリティグループなどで制御可能です。
AWS CloudTrail 経由ですべての接続の監査を提供し、セキュリティ体制の向上も可能です
セッションマネージャーとの違いは、以下の記事にまとめました
構成図
EIC エンドポイントでEC2に接続する構成図は以下の通りです
EC2 Instance Connectエンドポイントサービスは、ユーザー側で作成などはする必要がありません。AWS側で管理されています。
事前準備
- プライベートサブネット上にEC2を起動しておく
- EC2は、Amazon Linux 2023
セキュリティグループを作成
EICのエンドポイントのセキュリティグループとEC2のセキュリティグループを以下の通りに作成します。
EC2のセキュリティグループは、EICのエンドポイントのセキュリティグループを許可するのみです。
EICのエンドポイントのセキュリティグループ
セキュリティグループ | プロトコル | ポート | 送信先 |
---|---|---|---|
インバウンド | なし | なし | なし |
アウトバウンド | TCP | 22 | EC2のセキュリティグループ |
EC2のセキュリティグループ
セキュリティグループ | プロトコル | ポート | 送信先 |
---|---|---|---|
インバウンド | TCP | 22 | EICのエンドポイントのセキュリティグループ |
アウトバウンド | すべて | すべて | 0.0.0.0/0 |
EIC エンドポイント作成
EIC エンドポイントを作成します。
VPCエンドポイントの作成から、サービスカテゴリでEC2 Instance Connect Endpoint
を選択します。
サブネットは、プライベートサブネットを選択します。
Preserve Client IPには、チェックを入れずに、エンドポイントを作成します
Preserve Client IPとは
Preserve Client IP チェックをいれると、EIC エンドポイントは、ユーザーのクライアントIPを保持できます。
- クライアントIPを保持すると、EC2に接続時、ユーザーのクライアントの IP アドレスがソースとして使用されます
- クライアントIPを保持しない場合、EC2に接続時、プライベートサブネットにあるEC2 Instance Connect エンドポイントのElastic Network Interface IP アドレスがソースとして使用されます。
EC2に接続
それでは、EIC エンドポイント経由でEC2に接続します。
EC2の[接続]に遷移します
接続タイプは、EC2 Instance Connect エンドポイントを使用して接続する
、エンドポイントは先程作成したエンドポイントを選択し、接続します
接続できました!
AWS CLIの場合
AWS CLIの場合、aws ec2-instance-connect ssh
コマンドで接続できます。
今回は、CloudShell内で実行しました。
CLIのバージョンは、 最新のCLI v2(Ver.2.12.1)で試しました。
CloudShellの場合、下記コマンドで、CLIをアップデートできます。
$ curl -s "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" $ unzip -q awscliv2.zip $ sudo ./aws/install --update $ aws --version aws-cli/2.12.1 Python/3.11.3 Linux/4.14.255-314-253.539.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off
下記コマンドで、接続できます。
$ aws ec2-instance-connect ssh --instance-id i-xxxxxxxxxx \ --eice-options maxTunnelDuration=3600,endpointId=eice-xxxxxxxxxxx \ --os-user ec2-user The authenticity of host '10.0.0.x' (<no hostip for proxy command>)' can't be established. ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. ECDSA key fingerprint is MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '10.0.0.x' (ECDSA) to the list of known hosts. , #_ ~\_ ####_ Amazon Linux 2023 ~~ \_#####\ ~~ \###| ~~ \#/ ___ https://aws.amazon.com/linux/amazon-linux-2023 ~~ V~' '-> ~~~ / ~~._. _/ _/ _/ _/m/' [ec2-user@ip-10-0-3-170 ~]$
aws ec2-instance-connect ssh
コマンドの詳細は、以下をご参照ください
制限
EIC エンドポイントの作成する数には、以下の制限があります
- AWSアカウントごとに5 つのEIC エンドポイント
- VPCごとに1つのEIC エンドポイント
- サブネットごとに1つのEIC エンドポイント
1つのVPCに1つしかEIC エンドポイントを作成できません。
2つ目を作成しようとするとエラーが出ます。
料金
EIC エンドポイントの使用に追加料金はかかりません!
標準のデータ転送料金は適用されます。
最後に
従来、プライベートサブネットにあるEC2は、踏み台サーバーを設置するか、セッションマネージャーなどでアクセスする方法がありましたが、新たな選択肢として、EIC エンドポイントが増えました。
EIC エンドポイントには、IAMベースでのアクセス制御や接続のログも記録できるということで、色々触ってみたいと思います!